開始學習PL/SQL的陣痛期,將一些沒使用過的涵式及術語定義紀錄下來
前篇 : Oeacle 常用函式筆記 1
列表中第一個非空的表達式是函數的返回值,假如所有的表達式都是空值,最終將返回一個空值。
select Coalesce('A', 'B', 'C') from dual
-- 結果: A
select Coalesce(null, 'B') from dual
-- 結果: B
select Coalesce(null, null) from dual
-- 結果: null
在Oracle中, 在判斷資料是否存在與否, 除了用 IN, BETWEEN 之外, 還有另一種選擇, 就是用 "EXISTS"。
exists (子查詢)
-- 若子查詢有返回值則 return true 反之則 return false
子查詢中不要用select count(*)
, 這樣無論如何, 都會有值取回,也就是 exists 結果都是 true
使用範例 :
select * from tom1
where aa >= 2
and exists( select xx
from tom2
where xx = tom1.aa
);
在 Oracle 中可以建立 sequence 也就是序列號,每次取用後自動增加值。
CREATE SEQUENCE sequence名稱
INCREMENT BY 1 -- 每次加幾個
START WITH 1 -- 從1開始計數
NOMAXVALUE -- 不設置最大值
NOCYCLE -- 一直累加,不循環
CACHE 10;
定義完成後就可以用CURRVAL
,NEXTVAL
涵式
CURRVAL
: 返回 sequence的當前值NEXTVAL
: 增加 sequence的值,然返回 sequence 值參考 : Oracle的Sequence用法
在 Oracle 使用 rownum 欄位時會根據你SELECT的資料建立順序給予序號,所以如果有ORDER BY 欄位,rownum 的順序並不會按照順序呈現,這是因為 rownum 會在排序前先配置好的緣故。
在oracle中要跨資料庫查詢需要建立db_link,要查詢目前已有的db_link方式可以透過已下兩種方式
select * from dba_db_links;
%TYPE
是 Procedure 定義變數的一種方法,
V_StudentID students.id%TYPE 表示的含義:變數V_StudentID 與students表中id的欄位資料類型一致,長度也一致,當students中id的資料類型改變時,那麼V_StudentID的資料類型也會跟著改變。
筆記內容如果有錯誤歡迎留言告知,可以幫忙糾正錯誤的觀念,感謝!